home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / unix / src / unlink.c < prev    next >
C/C++ Source or Header  |  1992-08-08  |  730b  |  41 lines

  1. #include "amiga.h"
  2. #include "files.h"
  3. #include <amiga/ioctl.h>
  4.  
  5. static int delete_open_file(char *name)
  6. {
  7.   BPTR nlock = Lock(name, SHARED_LOCK);
  8.  
  9.   if (nlock)
  10.     {
  11.       int err = errno, i;
  12.  
  13.       i = _last_fd();
  14.       while (--i >= 0)
  15.     if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
  16.       {
  17.         errno = err;
  18.         return 0;
  19.       } 
  20.       UnLock(nlock);
  21.    }
  22.   return -1;
  23. }
  24.  
  25. int unlink(char *file)
  26. {
  27.   long err;
  28.  
  29.   chkabort();
  30.   if (DeleteFile(file)) return 0;
  31.   err = IoErr();
  32.   if (err == ERROR_DELETE_PROTECTED)
  33.     {
  34.       if (SetProtection(file, 0) && DeleteFile(file)) return 0;
  35.       err = IoErr();
  36.     }
  37.   if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
  38.   errno = convert_oserr(err);
  39.   return -1;
  40. }
  41.